package com.ishitong.platform.utils;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 范型工具
 */
public class GenericsUtils
{
	/**
	 * 根据序号取得范型参数的Class
	 * 
	 * @param clazz
	 *            范型实例类
	 * @param index
	 *            待取得的范型参数，从0开始
	 * @return 指定序号的范型参数Class
	 */
	public static Class getGenericClass(Class clazz, int index)
	{
		Type genType = clazz.getGenericSuperclass();

		if (genType instanceof ParameterizedType)
		{
			Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

			if ((params != null) && (params.length >= (index - 1)))
			{
				return (Class) params[index];
			}
		}
		return null;
	}

	/**
	 * 取得第一个范型参数的Class
	 * 
	 * @param clazz
	 *            范型实例类
	 * @return 第一个范型参数的Clss
	 */
	public static Class getGenericClass(Class clazz)
	{
		return getGenericClass(clazz, 0);
	}

}
